var ws;
var canvas;
var context;
var canvasSecond;
var contextSecond;
var canvasX;
var canvasY;
var canvasLastX;
var canvasLastY;
var isDragging = false;
var canvasX_manual = 0;
var canvasY_manual = 0;
var recX_manual = 0;
var recY_manual = 0;
var recW_manual = 0;
var recH_manual = 0;
var rec_ww = 0;
var rec_hh = 0;
var CutType = 0;
var imgOrignalW = 0;
var imgOrignalH = 0;
var rorateAngleType = 0;
var cutXCaibian = 0;
var cutYCaibian = 0;
var isDrawMove = false;
var canvasLastX2;
var canvasLastY2;
var isDragging2 = false;
var canvasX_manual2 = 0;
var canvasY_manual2 = 0;
var recX_manual2 = 0;
var recY_manual2 = 0;
var recW_manual2 = 0;
var recH_manual2 = 0;
var rec_ww2 = 0;
var rec_hh2 = 0;
var imgOrignalW2 = 0;
var imgOrignalH2 = 0;
var isDrawMove2 = false;
var cutXCaibian2 = 0;
var cutYCaibian2 = 0;
var faceZuobiao = new Array()
var faceZuobiaoSecond = new Array()
var faceNum = 0;
var faceNumSecond = 0;
var isFaceOpen = false;
var isFaceOpenSecond = false;
var setCusCut1 = false;
var cusCutX1 = 0;
var cusCutY1 = 0;
var cusCutW1 = 0;
var cusCutH1 = 0;
var setCusCut2 = false;
var cusCutX2 = 0;
var cusCutY2 = 0;
var cusCutW2 = 0;
var cusCutH2 = 0;
var lockReconnect=false
function WsInit(orignalCanvasW, orignalCanvasH, orignalCanvasW2, orignalCanvasH2, enableCanvas) {
	WsInit_ip(orignalCanvasW, orignalCanvasH, orignalCanvasW2, orignalCanvasH2, enableCanvas, "localhost");
}
function WsInit_ip(orignalCanvasW, orignalCanvasH, orignalCanvasW2, orignalCanvasH2, enableCanvas, ip) {
	if (enableCanvas) {
		canvas = document.getElementById("cameraCanvas");
		context = canvas.getContext("2d");
		if (isSecondDev) {
			canvasSecond = document.getElementById("cameraCanvasSecond");
			contextSecond = canvasSecond.getContext("2d");
			canvasSecond.onmousedown = canvasClick2;
			canvasSecond.onmouseup = stopDragging2;
			canvasSecond.onmouseout = stopDragging2;
			canvasSecond.onmousemove = canvasMove2;
			canvasSecond.setAttribute('width', canvasSecond.parentElement.offsetWidth);
			canvasSecond.setAttribute('height', canvasSecond.parentElement.offsetHeight);
			orignalCanvasW2 = canvasSecond.offsetWidth;
			orignalCanvasH2 = canvasSecond.offsetHeight;
		}
		canvas.onmousedown = canvasClick;
		canvas.onmouseup = stopDragging;
		canvas.onmouseout = stopDragging;
		canvas.onmousemove = canvasMove;
		canvasX = 0;
		canvasY = 0;
		canvasLastX = 0;
		canvasLastY = 0;
		canvas.setAttribute('width', canvas.parentElement.offsetWidth);
		canvas.setAttribute('height', canvas.parentElement.offsetHeight);

		orignalCanvasW = canvas.offsetWidth;
		orignalCanvasH = canvas.offsetHeight;
	}
	//ws=new WebSocket("ws://localhost:9002"); 
	ws = new WebSocket("ws://" + ip + ":9002");
	ws.binaryType = "arraybuffer";
	ws.onmessage = function(event) {
		if (typeof(event.data) == "string") {

			if (event.data.indexOf("GetPicBase64:") >= 0) {
				var strTemp = event.data.substr(13);
				InfoTextCallback(5, strTemp);
			} else if (event.data.indexOf("GetPic2Base64:") >= 0) {
				var strTemp = event.data.substr(14);
				InfoTextCallback(21, strTemp);
			}


			return;
		}
		var aDataArray = new Uint8Array(event.data);
		if (aDataArray.length > 0) {
			if (aDataArray[0] == 0xef && aDataArray[1] == 0x01) {
				// getDeviceName(aDataArray[3]);
				// getResolution(aDataArray,5);
				getUsbCamareMessage(aDataArray, 5)
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x17) {
				var camNum = aDataArray[3];
				//GetDevCount(camNum);
				InfoTextCallback(26, camNum);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x19) {
				getResolution(aDataArray, 5);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x23) {
				//getResolution(aDataArray,4);
				var type = aDataArray[3];
				var len = aDataArray[4];
				var data = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					data[i] = aDataArray[5 + i];
				}
				var str = byteToString(data)
				var text = decodeURIComponent(str);
				InfoTextCallback(type, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x05) {
				var ww = aDataArray[3] * 256 + aDataArray[4];
				var hh = aDataArray[5] * 256 + aDataArray[6];
				context.clearRect(0, 0, canvas.width, canvas.height);
				//sendMsgRefreshCam();
				var imgData = context.createImageData(ww, hh);
				var dataNum = 0;
				for (var i = 0; i < imgData.data.length; i += 4) {
					imgData.data[i + 0] = aDataArray[dataNum];
					imgData.data[i + 1] = aDataArray[dataNum + 1];
					imgData.data[i + 2] = aDataArray[dataNum + 2];
					imgData.data[i + 3] = 255;
					dataNum = dataNum + 3;
				}
				sendMsgRefreshCam();
				if (CutType == 2) {
					rec_ww = ww;
					rec_hh = hh;
					context.putImageData(imgData, canvas.width / 2 - ww / 2, canvas.height / 2 - hh / 2);
					SetCusCutFirst();
					refreshRect();
				} else context.putImageData(imgData, canvas.width / 2 - ww / 2 + canvasX, canvas.height / 2 - hh /
					2 + canvasY);

				context.beginPath();
				context.strokeStyle = "rgb(0,255,0)";
				context.lineWidth = 2;
				GetFaceZuobiao(canvas.width / 2 - ww / 2 + canvasX, canvas.height / 2 - hh / 2 + canvasY);

			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x0c) {
				var ww = aDataArray[3] * 256 + aDataArray[4];
				var hh = aDataArray[5] * 256 + aDataArray[6];
				context.clearRect(0, 0, canvas.width, canvas.height);
				//sendMsgRefreshCam();
				var imgData = context.createImageData(ww, hh);
				var dataNum = 0;
				for (var i = 0; i < imgData.data.length; i += 4) {
					imgData.data[i + 0] = aDataArray[dataNum];
					imgData.data[i + 1] = aDataArray[dataNum + 1];
					imgData.data[i + 2] = aDataArray[dataNum + 2];
					imgData.data[i + 3] = 255;
					dataNum = dataNum + 3;
				}
				sendMsgRefreshCam();
				var Xdis = canvas.width / 2 - ww / 2 + canvasX;
				var Ydis = canvas.height / 2 - hh / 2 + canvasY;
				context.putImageData(imgData, Xdis, Ydis);
				var lenJiubian = aDataArray[7];

				context.beginPath();
				context.strokeStyle = "rgb(0,255,0)";
				context.lineWidth = 2;
				for (var j = 0; j < lenJiubian; j++) {
					for (var i = 0; i < 3; i++) {
						var aa = 1;
						if (aDataArray[8 + i * 6 + j * 24] == 1) {
							aa = -1;
						}
						var bb = 1;
						if (aDataArray[11 + i * 6 + j * 24] == 1) {
							bb = -1;
						}
						var cc = 1;
						if (aDataArray[14 + i * 6 + j * 24] == 1) {
							cc = -1;
						}
						var dd = 1;
						if (aDataArray[17 + i * 6 + j * 24] == 1) {
							dd = -1;
						}
						context.moveTo(aDataArray[9 + i * 6 + j * 24] * 256 * aa + aDataArray[10 + i * 6 + j * 24] *
							aa + Xdis, aDataArray[12 + i * 6 + j * 24] * 256 * bb + aDataArray[13 + i * 6 + j *
								24] * bb + Ydis);
						context.lineTo(aDataArray[15 + i * 6 + j * 24] * 256 * cc + aDataArray[16 + i * 6 + j *
							24] * cc + Xdis, aDataArray[18 + i * 6 + j * 24] * 256 * dd + aDataArray[19 +
							i *
							6 + j * 24] * dd + Ydis);
						context.stroke();
					}
					var ee = 1;
					if (aDataArray[26 + j * 24] == 1) {
						ee = -1;
					}
					var ff = 1;
					if (aDataArray[8 + j * 24] == 1) {
						ff = -1;
					}
					context.moveTo(aDataArray[27 + j * 24] * 256 + aDataArray[28 + j * 24] + Xdis, aDataArray[30 +
						j * 24] * 256 + aDataArray[31 + j * 24] + Ydis);
					context.lineTo(aDataArray[9 + j * 24] * 256 + aDataArray[10 + j * 24] + Xdis, aDataArray[12 +
						j * 24] * 256 + aDataArray[13 + j * 24] + Ydis);
					context.stroke();
				}
				GetFaceZuobiao(canvas.width / 2 - ww / 2 + canvasX, canvas.height / 2 - hh / 2 + canvasY);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x14) {
				var tmp = aDataArray[3];
				if (tmp == 0x46) {
					isFaceOpen = true;
				} else if (tmp == 0x48) {
					isFaceOpenSecond = true;
				} else if (tmp == 0x5e) {
					isFaceOpen = true;
					isFaceOpenSecond = true;
				} else if (tmp == 0x5f) {
					isFaceOpen = true;
				} else if (tmp == 0x61) {
					isFaceOpenSecond = true;
				}
				InfoCallback(tmp);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x26) {
				if (isSecondDev) {
					var ww = aDataArray[3] * 256 + aDataArray[4];
					var hh = aDataArray[5] * 256 + aDataArray[6];
					contextSecond.clearRect(0, 0, canvasSecond.width, canvasSecond.height);
					var imgData = contextSecond.createImageData(ww, hh);
					var dataNum = 0;
					for (var i = 0; i < imgData.data.length; i += 4) {
						imgData.data[i + 0] = aDataArray[dataNum];
						imgData.data[i + 1] = aDataArray[dataNum + 1];
						imgData.data[i + 2] = aDataArray[dataNum + 2];
						imgData.data[i + 3] = 255;
						dataNum = dataNum + 3;
					}
					sendMsgRefreshCamSecond();

					contextSecond.putImageData(imgData, canvasSecond.width / 2 - ww / 2, canvasSecond.height / 2 -
						hh / 2);
					if (CutType == 2) {
						rec_ww2 = ww;
						rec_hh2 = hh;
						SetCusCutSec();
						refreshRect2();
					}
					GetFaceZuobiaoSecond(canvasSecond.width / 2 - ww / 2, canvasSecond.height / 2 - hh / 2)


				}
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x30) {
				var type1 = aDataArray[3];
				var ret = 1;
				if (type1 == 0) {
					ret = -1;
				}
				var min = aDataArray[4] * ret;
				var type2 = aDataArray[5];
				ret = 1;
				if (type2 == 0) {
					ret = -1;
				}
				var max = aDataArray[6] * ret;
				var text = "" + min + "*" + max;
				InfoTextCallback(23, text);
				// GetBrightnessRange_ws(min,max);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x32) {
				var type1 = aDataArray[3];
				var ret = 1;
				if (type1 == 0) {
					ret = -1;
				}
				var min = aDataArray[4] * ret;
				var type2 = aDataArray[5];
				ret = 1;
				if (type2 == 0) {
					ret = -1;
				}
				var max = aDataArray[6] * ret;
				var max = aDataArray[6] * ret;
				var text = "" + min + "*" + max;
				InfoTextCallback(22, text);
				// GetExposureRange_ws(min,max);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x36) {
				var len = aDataArray[3] * 65536 + aDataArray[4] * 256 + aDataArray[5];
				var baseDataArray = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					baseDataArray[i] = aDataArray[6 + i];
				}
				var str = byteToString(baseDataArray);
				var text = decodeURIComponent(str);
				var last = text.substr(str.length - 2, 1);
				var lastSecond = text.substr(str.length - 3, 1);
				if (last == "=" && lastSecond != "=") {
					text = text.substring(0, text.length - 1)
					text = text + "=";
				}
				InfoTextCallback(5, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x3b) {
				camidMain = aDataArray[3];
				// if(isSecondDev){
				camidSub = aDataArray[4];
				//}
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x3e) {
				var len = aDataArray[3] * 65536 + aDataArray[4] * 256 + aDataArray[5];
				var baseDataArray = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					baseDataArray[i] = aDataArray[6 + i];
				}
				var str = byteToString(baseDataArray);
				var text = decodeURIComponent(str);
				InfoTextCallback(19, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x43) {
				var len = aDataArray[3] * 65536 + aDataArray[4] * 256 + aDataArray[5];
				var baseDataArray = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					baseDataArray[i] = aDataArray[6 + i];
				}
				var str = byteToString(baseDataArray);
				var text = decodeURIComponent(str);
				var last = text.substr(str.length - 2, 1);
				var lastSecond = text.substr(str.length - 3, 1);
				if (last == "=" && lastSecond != "=") {
					text = text.substring(0, text.length - 1)
					text = text + "=";
				}
				InfoTextCallback(21, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x4a) {
				rorateAngleType = aDataArray[3];
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x4c) {
				var len = aDataArray[3] * 65536 + aDataArray[4] * 256 + aDataArray[5];
				var baseDataArray = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					baseDataArray[i] = aDataArray[6 + i];
				}
				var str = byteToString(baseDataArray);
				var text = decodeURIComponent(str);
				var last = text.substr(str.length - 2, 1);
				var lastSecond = text.substr(str.length - 3, 1);
				if (last == "=" && lastSecond != "=") {
					text = text.substring(0, text.length - 1)
					text = text + "=";
				}
				InfoTextCallback(25, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x5f) {
				var len = aDataArray[3] * 65536 + aDataArray[4] * 256 + aDataArray[5];
				var baseDataArray = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					baseDataArray[i] = aDataArray[6 + i];
				}
				var str = byteToString(baseDataArray);
				var text = decodeURIComponent(str);
				var last = text.substr(str.length - 2, 1);
				var lastSecond = text.substr(str.length - 3, 1);
				if (last == "=" && lastSecond != "=") {
					text = text.substring(0, text.length - 1)
					text = text + "=";
				}
				InfoTextCallback(28, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x60) {
				faceNum = aDataArray[3];
				for (var j = 0; j < faceNum * 4; j++) {
					var aa = 1;
					if (aDataArray[4 + j * 6] == 1) {
						aa = -1;
					}
					faceZuobiao[j * 2] = aDataArray[5 + j * 6] * 256 * aa + aDataArray[6 + j * 6] * aa;

					var bb = 1;
					if (aDataArray[7 + j * 6] == 1) {
						bb = -1;
					}
					faceZuobiao[j * 2 + 1] = aDataArray[8 + j * 6] * 256 * bb + aDataArray[9 + j * 6] * bb;
				}

			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x62) {
				faceNumSecond = aDataArray[3];
				for (var j = 0; j < faceNumSecond * 4; j++) {
					var aa = 1;
					if (aDataArray[4 + j * 6] == 1) {
						aa = -1;
					}
					faceZuobiaoSecond[j * 2] = aDataArray[5 + j * 6] * 256 * aa + aDataArray[6 + j * 6] * aa;

					var bb = 1;
					if (aDataArray[7 + j * 6] == 1) {
						bb = -1;
					}
					faceZuobiaoSecond[j * 2 + 1] = aDataArray[8 + j * 6] * 256 * bb + aDataArray[9 + j * 6] * bb;
				}

			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x67) {
				var tmp = aDataArray[3];
				if (tmp == 0x00) {
					faceNum = 0;
				} else if (tmp == 0x01) {
					faceNumSecond = 0;
				}
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x71) {
				//getResolution(aDataArray,4);
				var type = aDataArray[3];
				var len = aDataArray[4] * 256 + aDataArray[5];
				var data = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					data[i] = aDataArray[6 + i];
				}
				var str = byteToString(data)
				var text = decodeURIComponent(str);
				InfoTextCallback(type, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x73) {
				var len = aDataArray[3] * 65536 + aDataArray[4] * 256 + aDataArray[5];
				var baseDataArray = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					baseDataArray[i] = aDataArray[6 + i];
				}
				var str = byteToString(baseDataArray);
				var text = decodeURIComponent(str);
				var last = text.substr(str.length - 2, 1);
				var lastSecond = text.substr(str.length - 3, 1);
				if (last == "=" && lastSecond != "=") {
					text = text.substring(0, text.length - 1)
					text = text + "=";
				}
				InfoTextCallback(30, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x7e) {
				var len = aDataArray[3] * 65536 + aDataArray[4] * 256 + aDataArray[5];
				var baseDataArray = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					baseDataArray[i] = aDataArray[6 + i];
				}
				var str = byteToString(baseDataArray);
				var text = decodeURIComponent(str);
				var last = text.substr(str.length - 2, 1);
				var lastSecond = text.substr(str.length - 3, 1);
				if (last == "=" && lastSecond != "=") {
					text = text.substring(0, text.length - 1)
					text = text + "=";
				}
				InfoTextCallback(33, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x84) {
				var len = aDataArray[3] * 65536 + aDataArray[4] * 256 + aDataArray[5];
				var baseDataArray = new Uint8Array(len);
				for (var i = 0; i < len; i++) {
					baseDataArray[i] = aDataArray[6 + i];
				}
				var str = byteToString(baseDataArray);
				var text = decodeURIComponent(str);
				var last = text.substr(str.length - 2, 1);
				var lastSecond = text.substr(str.length - 3, 1);
				if (last == "=" && lastSecond != "=") {
					text = text.substring(0, text.length - 1)
					text = text + "=";
				}
				InfoTextCallback(36, text);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x80) {
				//getResolution(aDataArray,4);
				var len = aDataArray[3] * 256 + aDataArray[4];
				InfoTextCallback(34, len);
			} else if (aDataArray[0] == 0xef && aDataArray[1] == 0x92) {
				var len = aDataArray[3] * 256 + aDataArray[4];
				InfoTextCallback(37, len);
			}
		}
	};
	// ´ò¿ªWebSocket 
	ws.onclose = function(event) {
		//WebSocket Status:: Socket Closed
		InfoCallback(0xa3);
		//alert("程序出现异常,请重新启动0x00"); 
	};
	// ´ò¿ªWebSocket
	ws.onopen = function(event) {
		
		if (enableCanvas) {
			sendSendStrBase64();
			sendMsgGetMainCameraID();
			sendMsgRefreshDev();
      sendMsgShotBase64(1);  //Base64图片
			initParameter(orignalCanvasW, orignalCanvasH, orignalCanvasW2, orignalCanvasH2);
		}
		InfoCallback(0x24);
	};
	ws.onerror = function(event) {
		//WebSocket Status:: Error was reported
		InfoCallback(0xa4);
		// alert("程序出现异常,请重新启动0x01"); 
	};
}
function initParameter(orignalCanvasW, orignalCanvasH, orignalCanvasW2, orignalCanvasH2) {
	sendMsgBestSize();
	sendMsgSetCutType(0);
	sendMsgSetFileType(0);
	sendMsgSetImageColorMode(0);
	sendMsgSetConntinousShotModel(0);
	sendMsgChangeOrientation(0);
	sendMsgSetCanvasOriginalSize(orignalCanvasW, orignalCanvasH);
	sendMsgSetCanvasSecondOriginalSize(orignalCanvasW2, orignalCanvasH2);
}
function canvasClick(e) {
	isDragging = true;
	if (!isDrawMove) {
		canvasLastX = 0;
		canvasLastY = 0;
		canvasX_manual = 0;
		canvasY_manual = 0;
		recX_manual = 0;
		recY_manual = 0;
		recW_manual = 0;
		recH_manual = 0;
	} else {
	}
}
function stopDragging() {
	isDragging = false;
	canvasLastX = 0;
	canvasLastY = 0;
	canvasX_manual = 0;
	canvasY_manual = 0;
	if (CutType == 2) {
		bpp = rec_ww / imgOrignalW;
		if (rorateAngleType == 1 || rorateAngleType == 3) {
			bpp = rec_ww / imgOrignalH;
		}
		cutXCaibian = Math.abs(recW_manual) / bpp;
		cutYCaibian = Math.abs(recH_manual) / bpp;
	}
}
function getTop(e) {
	var offset = e.offsetTop;
	if (e.offsetParent != null) offset += getTop(e.offsetParent);
	return offset;
}
//获取元素的横坐标
function getLeft(e) {
	var offset = e.offsetLeft;
	if (e.offsetParent != null) offset += getLeft(e.offsetParent);
	return offset;
}
function canvasMove(e) {
	// var mx = e.pageX - canvas.offsetLeft;
	// var my = e.pageY - canvas.offsetTop;
	var mx = e.pageX - getLeft(canvas);
	var my = e.pageY - getTop(canvas);
	if (CutType == 2) {
		var x1 = recX_manual;
		var x2 = recX_manual + recW_manual;
		if (x1 > x2) {
			x1 = x2;
			x2 = recX_manual;
		}
		var y1 = recY_manual;
		var y2 = recY_manual + recH_manual;
		if (y1 > y2) {
			y1 = y2;
			y2 = recY_manual;
		}
		if (x1 <= mx && mx <= x2 && y1 <= my && my <= y2) {
			isDrawMove = true;
			if (isDragging) {
				if (canvasLastX == 0 && canvasLastY == 0) {
					canvasLastX = mx;
					canvasLastY = my;
				} else {
					recX_manual = recX_manual + (mx - canvasLastX);
					recY_manual = recY_manual + (my - canvasLastY);
					canvasLastX = mx;
					canvasLastY = my;
				}
			}
			return;
		} else if (x1 - 30 <= mx && mx <= x2 + 30 && y1 - 30 <= my && my <= y2 + 30) {
			isDrawMove = true;
			if (isDragging) {
				if (canvasLastX == 0 && canvasLastY == 0) {
					canvasLastX = mx;
					canvasLastY = my;
				} else {
					var tmpX2 = recX_manual + recW_manual;
					if (Math.abs(recX_manual - mx) < Math.abs(tmpX2 - mx)) {
						recX_manual = recX_manual + (mx - canvasLastX);
						recW_manual = recW_manual - (mx - canvasLastX);
					} else recW_manual = recW_manual + (mx - canvasLastX);
					var tmpY2 = recY_manual + recH_manual;
					if (Math.abs(recY_manual - my) < Math.abs(tmpY2 - my)) {
						recY_manual = recY_manual + (my - canvasLastY);
						recH_manual = recH_manual - (my - canvasLastY);
					} else recH_manual = recH_manual + (my - canvasLastY);
					canvasLastX = mx;
					canvasLastY = my;
				}
				return;
			}
		} else isDrawMove = false;
	}
	if (isDragging == true) {
		if (CutType != 2) {
			if (canvasLastX == 0 && canvasLastY == 0) {
				canvasLastX = e.pageX - canvas.offsetLeft;
				canvasLastY = e.pageY - canvas.offsetTop;
			} else {
				canvasX = canvasX + (mx - canvasLastX);
				canvasY = canvasY + (my - canvasLastY);
				canvasLastX = mx;
				canvasLastY = my;
			}
		} else {


			if (canvasLastX == 0 && canvasLastY == 0) {
				canvasLastX = mx;
				canvasLastY = my;
				recX_manual = mx;
				recY_manual = my;
			} else {

				canvasX_manual = canvasX_manual + (mx - canvasLastX);
				canvasY_manual = canvasY_manual + (my - canvasLastY);
				canvasLastX = mx;
				canvasLastY = my;
				recW_manual = canvasX_manual;
				recH_manual = canvasY_manual;
			}
		}
	}
}
function canvasClick2(e) {
	isDragging2 = true;
	if (!isDrawMove2) {
		canvasLastX2 = 0;
		canvasLastY2 = 0;
		canvasX_manual2 = 0;
		canvasY_manual2 = 0;
		recX_manual2 = 0;
		recY_manual2 = 0;
		recW_manual2 = 0;
		recH_manual2 = 0;
	}
}
function stopDragging2() {
	isDragging2 = false;
	canvasLastX2 = 0;
	canvasLastY2 = 0;
	canvasX_manual2 = 0;
	canvasY_manual2 = 0;
	if (CutType == 2) {
		var bpp2 = rec_ww2 / imgOrignalW2;
		cutXCaibian2 = Math.abs(recW_manual2) / bpp2;
		cutYCaibian2 = Math.abs(recH_manual2) / bpp2;
	}
}
function canvasMove2(e) {
	var mx = e.pageX - canvasSecond.offsetLeft;
	var my = e.pageY - canvasSecond.offsetTop;
	if (CutType == 2) {
		var x1 = recX_manual2;
		var x2 = recX_manual2 + recW_manual2;
		if (x1 > x2) {
			x1 = x2;
			x2 = recX_manual2;
		}
		var y1 = recY_manual2;
		var y2 = recY_manual2 + recH_manual2;
		if (y1 > y2) {
			y1 = y2;
			y2 = recY_manual2;
		}
		if (x1 <= mx && mx <= x2 && y1 <= my && my <= y2) {
			isDrawMove2 = true;
			if (isDragging2) {
				if (canvasLastX2 == 0 && canvasLastY2 == 0) {
					canvasLastX2 = mx;
					canvasLastY2 = my;
				} else {
					recX_manual2 = recX_manual2 + (mx - canvasLastX2);
					recY_manual2 = recY_manual2 + (my - canvasLastY2);
					canvasLastX2 = mx;
					canvasLastY2 = my;
				}
			}
			return;
		} else if (x1 - 30 <= mx && mx <= x2 + 30 && y1 - 30 <= my && my <= y2 + 30) {
			isDrawMove2 = true;
			if (isDragging2) {
				if (canvasLastX2 == 0 && canvasLastY2 == 0) {
					canvasLastX2 = mx;
					canvasLastY2 = my;
				} else {
					var tmpX2 = recX_manual2 + recW_manual2;
					if (Math.abs(recX_manual2 - mx) < Math.abs(tmpX2 - mx)) {
						recX_manual2 = recX_manual2 + (mx - canvasLastX2);
						recW_manual2 = recW_manual2 - (mx - canvasLastX2);
					} else recW_manual2 = recW_manual2 + (mx - canvasLastX2);
					var tmpY2 = recY_manual2 + recH_manual2;
					if (Math.abs(recY_manual2 - my) < Math.abs(tmpY2 - my)) {
						recY_manual2 = recY_manual2 + (my - canvasLastY2);
						recH_manual2 = recH_manual2 - (my - canvasLastY2);
					} else recH_manual2 = recH_manual2 + (my - canvasLastY2);
					canvasLastX2 = mx;
					canvasLastY2 = my;
				}
				return;
			}
		} else isDrawMove2 = false;
	}
	if (isDragging2 == true) {
		if (CutType != 2) {
		} else {
			if (canvasLastX2 == 0 && canvasLastY2 == 0) {
				canvasLastX2 = mx;
				canvasLastY2 = my;
				recX_manual2 = mx;
				recY_manual2 = my;
			} else {
				canvasX_manual2 = canvasX_manual2 + (mx - canvasLastX2);
				canvasY_manual2 = canvasY_manual2 + (my - canvasLastY2);
				canvasLastX2 = mx;
				canvasLastY2 = my;
				recW_manual2 = canvasX_manual2;
				recH_manual2 = canvasY_manual2;
			}
		}
	}
}
function getResolution(arrayData, tmpNum) {
	var type = arrayData[3]
	var len = arrayData[4];
	var data = new Int32Array(len * 2);
	var num = 0;
	for (var i = 0; i < len; i++) {
		data[num] = arrayData[tmpNum] * 256 + arrayData[tmpNum + 1];
		num++;
		data[num] = arrayData[tmpNum + 2] * 256 + arrayData[tmpNum + 3];
		num++;
		tmpNum += 4;
	}
	if (type == 0) {
		GetDeviceResolution(data);
	} else {
		if (isSecondDev) {
			GetDeviceResolutionSecond(data);
			LoadOver2();
		}
	}
}
function getUsbCamareMessage(arrayData, tmpNum) {
	
	var numCam = arrayData[3];
	var len = arrayData[4];
	var data = new Int32Array(len * 2);
	var num = 0;
	for (var i = 0; i < len; i++) {
		data[num] = arrayData[tmpNum] * 256 + arrayData[tmpNum + 1];
		num++;
		data[num] = arrayData[tmpNum + 2] * 256 + arrayData[tmpNum + 3];
		num++;
		tmpNum += 4;
	}
	GetDeviceResolution(data);
	LoadOver();
	var strUsbNamr = new Array()
	for (var i = 0; i < numCam; i++) {
		var tmpLen = arrayData[tmpNum];
		var tmpData = new Uint8Array(tmpLen);
		tmpNum++;
		for (var j = 0; j < tmpLen; j++) {
			tmpData[j] = arrayData[tmpNum];
			tmpNum++;
		}
		// var arr =       Utf8ToUnicode(tmpData)
		var str = byteToString(tmpData);
		var text = decodeURIComponent(str);
		strUsbNamr[i] = text;
	}
	GetDevName(numCam, strUsbNamr);

}

function sendMsgRefreshCam() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x04;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgStartVideo2(camId, width, height) {

	imgOrignalW2 = width;
	imgOrignalH2 = height;
	var aDataArray = new Uint8Array(8);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x25;
	aDataArray[2] = 0x05;
	aDataArray[3] = camId;
	aDataArray[4] = width / 256;
	aDataArray[5] = width % 256;
	aDataArray[6] = height / 256;
	aDataArray[7] = height % 256;
	ws.send(aDataArray.buffer);
}
function sendMsgStartVideo2YUV(camId, width, height) {

	imgOrignalW2 = width;
	imgOrignalH2 = height;
	var aDataArray = new Uint8Array(8);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x8b;
	aDataArray[2] = 0x05;
	aDataArray[3] = camId;
	aDataArray[4] = width / 256;
	aDataArray[5] = width % 256;
	aDataArray[6] = height / 256;
	aDataArray[7] = height % 256;
	ws.send(aDataArray.buffer);
}

function sendMsgRefreshCamSecond() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x27;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgSetCanvasOriginalSize(ww, hh) {
	var aDataArray = new Uint8Array(7);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x15;
	aDataArray[2] = 0x04;
	aDataArray[3] = ww / 256;
	aDataArray[4] = ww % 256;
	aDataArray[5] = hh / 256;
	aDataArray[6] = hh % 256;
	ws.send(aDataArray.buffer);
}
function sendMsgSetCanvasSecondOriginalSize(ww, hh) {
	var aDataArray = new Uint8Array(7);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x37;
	aDataArray[2] = 0x04;
	aDataArray[3] = ww / 256;
	aDataArray[4] = ww % 256;
	aDataArray[5] = hh / 256;
	aDataArray[6] = hh % 256;
	ws.send(aDataArray.buffer);
}
function sendMsgRefreshDev() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x00;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgStartVideo(camId, width, height) {
	if (width == 3672 || width == 4000 || width == 4208) {
		imgOrignalW = 3264;
		imgOrignalH = 2448;
	} else {
		imgOrignalW = width;
		imgOrignalH = height;
	}
	var aDataArray = new Uint8Array(8);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x02;
	aDataArray[2] = 0x05;
	aDataArray[3] = camId;
	aDataArray[4] = width / 256;
	aDataArray[5] = width % 256;
	aDataArray[6] = height / 256;
	aDataArray[7] = height % 256;
	ws.send(aDataArray.buffer);
}
function sendMsgStartVideoYUV(camId, width, height) {
	if (width == 3672 || width == 4000 || width == 4208) {
		imgOrignalW = 3264;
		imgOrignalH = 2448;
	} else {
		imgOrignalW = width;
		imgOrignalH = height;
	}
	var aDataArray = new Uint8Array(8);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x8a;
	aDataArray[2] = 0x05;
	aDataArray[3] = camId;
	aDataArray[4] = width / 256;
	aDataArray[5] = width % 256;
	aDataArray[6] = height / 256;
	aDataArray[7] = height % 256;
	ws.send(aDataArray.buffer);
}
function sendMsgChangeOrientation(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x06;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgSetImageColorMode(type) {
	var aDataArray2 = new Uint8Array(4);
	aDataArray2[0] = 0xef;
	aDataArray2[1] = 0x07;
	aDataArray2[2] = 0x01;
	aDataArray2[3] = type;
	ws.send(aDataArray2.buffer);
}
function sendMsgCloseVideo() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x08;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
	context.clearRect(0, 0, canvas.width, canvas.height);
}
function sendMsgCloseVideoSecond() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x28;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
	contextSecond.clearRect(0, 0, canvas.width, canvas.height);
}
function sendMsgChangeResolution(camId, width, height) {

	var aDataArray = new Uint8Array(8);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x02;
	aDataArray[2] = 0x05;
	aDataArray[3] = camId;
	aDataArray[4] = width / 256;
	aDataArray[5] = width % 256;
	aDataArray[6] = height / 256;
	aDataArray[7] = height % 256;
	ws.send(aDataArray.buffer);
}
function sendMsgSetFilePath(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x1c;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgSetFileNameModelCustom(index, pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(6 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x1d;
	aDataArray[2] = len + 3;
	aDataArray[3] = index / 256;
	aDataArray[4] = index % 256;
	aDataArray[5] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[6 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgSetFileNameModelCustomSecond(index, pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(6 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x46;
	aDataArray[2] = len + 3;
	aDataArray[3] = index / 256;
	aDataArray[4] = index % 256;
	aDataArray[5] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[6 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgSetFileNameModelFixed(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x1f;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgSetFileNameModelFixedSecond(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x48;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgSetFileNameModelTime() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x1e;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgSetFileNameModelTimeSecond() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x47;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgSetFileNameModelBarcode() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x2b;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgSetFileType(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x20;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgSetConntinousShotModel(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x21;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgSetConntinousShotModelTime(len) {
	var aDataArray = new Uint8Array(5);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x22;
	aDataArray[2] = 0x02;
	aDataArray[3] = len / 256;
	aDataArray[4] = len % 256;
	ws.send(aDataArray.buffer);
}
function sendMsgUploadFile(uploadSerHead, uploadSerLast, uploadSerFile) {
	var path = encodeURI(uploadSerHead);
	var pathdata = stringToByte(path);
	var len = path.length;
	var path2 = encodeURI(uploadSerLast);
	var pathdata2 = stringToByte(path2);
	var len2 = path2.length;
	var path3 = encodeURI(uploadSerFile);
	var pathdata3 = stringToByte(path3);
	var len3 = path3.length;
	var aDataArray = new Uint8Array(8 + len + len2 + len3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x24;
	aDataArray[2] = 5 + len + len2 + len3;
	aDataArray[3] = 0x00;
	aDataArray[4] = 80 % 256;
	aDataArray[5] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[6 + i] = pathdata[i];
	}
	aDataArray[6 + len] = len2;
	for (var i = 0; i < len2; i++) {
		aDataArray[7 + len + i] = pathdata2[i];
	}
	aDataArray[7 + len + len2] = len3;
	for (var i = 0; i < len3; i++) {
		aDataArray[8 + len + len2 + i] = pathdata3[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgUploadFilePort(port, uploadSerHead, uploadSerLast, uploadSerFile) {
	var path = encodeURI(uploadSerHead);
	var pathdata = stringToByte(path);
	var len = path.length;
	var path2 = encodeURI(uploadSerLast);
	var pathdata2 = stringToByte(path2);
	var len2 = path2.length;
	var path3 = encodeURI(uploadSerFile);
	var pathdata3 = stringToByte(path3);
	var len3 = path3.length;
	var aDataArray = new Uint8Array(9 + len + len2 + len3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xb1;
	aDataArray[2] = 5 + len + len2 + len3;
	aDataArray[3] = port / 256;
	aDataArray[4] = port % 256;
	aDataArray[5] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[6 + i] = pathdata[i];
	}
	aDataArray[6 + len] = len2 / 256;
	aDataArray[7 + len] = len2 % 256;
	for (var i = 0; i < len2; i++) {
		aDataArray[8 + len + i] = pathdata2[i];
	}
	aDataArray[8 + len + len2] = len3;
	for (var i = 0; i < len3; i++) {
		aDataArray[9 + len + len2 + i] = pathdata3[i];
	}
	ws.send(aDataArray.buffer);
}

function sendMsgCapture(type) {
	if (type != 2) {
		var aDataArray = new Uint8Array(4);
		aDataArray[0] = 0xef;
		aDataArray[1] = 0x0a;
		aDataArray[2] = 0x01;
		aDataArray[3] = 0x00;
		ws.send(aDataArray.buffer);
	} else {
		var x1 = recX_manual;
		if (recX_manual > recX_manual + recW_manual) {
			x1 = recX_manual + recW_manual;
		}
		var y1 = recY_manual;
		if (recY_manual > recY_manual + recH_manual) {
			y1 = recY_manual + recH_manual;
		}

		//   var bpp = rec_ww/imgOrignalW;
		// if(rorateAngleType==1 || rorateAngleType==3){
		//   bpp = rec_hh/imgOrignalH;
		// }
		//var w1 = Math.abs(recW_manual/bpp);
		//  var h1 = Math.abs(recH_manual/bpp);
		var xsend = x1 - (canvas.width / 2 - rec_ww / 2);
		var ysend = y1 - (canvas.height / 2 - rec_hh / 2);

		if (xsend < 0) xsend = 0;
		if (ysend < 0) ysend = 0;
		var aDataArray = new Uint8Array(11);
		aDataArray[0] = 0xef;
		//aDataArray[1] = 0x0f;
		aDataArray[1] = 0x4b;
		aDataArray[2] = 0x08;
		aDataArray[3] = xsend / 256;
		aDataArray[4] = xsend % 256;
		aDataArray[5] = ysend / 256;
		aDataArray[6] = ysend % 256;
		aDataArray[7] = cutXCaibian / 256;
		aDataArray[8] = cutXCaibian % 256;
		aDataArray[9] = cutYCaibian / 256;
		aDataArray[10] = cutYCaibian % 256;
		// aDataArray[7] = recW_manual/256;
		// aDataArray[8] = recW_manual%256;
		// aDataArray[9] = recH_manual/256;
		// aDataArray[10] = recH_manual%256;
		ws.send(aDataArray.buffer);
	}
}
function sendMsgCaptureSecond() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x29;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgCaptureSecondCaibian() {
	var x1 = recX_manual2;
	if (recX_manual2 > recX_manual2 + recW_manual2) {
		x1 = recX_manual2 + recW_manual2;
	}
	var y1 = recY_manual2;
	if (recY_manual2 > recY_manual2 + recH_manual2) {
		y1 = recY_manual2 + recH_manual2;
	}
	var xsend = x1 - (canvasSecond.width / 2 - rec_ww2 / 2);
	var ysend = y1 - (canvasSecond.height / 2 - rec_hh2 / 2);

	if (xsend < 0) xsend = 0;
	if (ysend < 0) ysend = 0;
	var aDataArray = new Uint8Array(11);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x4c;
	aDataArray[2] = 0x08;
	aDataArray[3] = xsend / 256;
	aDataArray[4] = xsend % 256;
	aDataArray[5] = ysend / 256;
	aDataArray[6] = ysend % 256;
	aDataArray[7] = cutXCaibian2 / 256;
	aDataArray[8] = cutXCaibian2 % 256;
	aDataArray[9] = cutYCaibian2 / 256;
	aDataArray[10] = cutYCaibian2 % 256;
	ws.send(aDataArray.buffer);
}
function sendMsgShowImageSettingWindow() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x0b;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgShowImageSettingWindowB() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x45;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}

function sendMsgZoom(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x0d;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgSetCutType(type) {
	canvasX = 0;
	canvasY = 0;
	CutType = type;
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x0e;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgSetJiubianModel(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x10;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgGetCamNum() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x16;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgGetResolution(camid) {
	var aDataArray = new Uint8Array(5);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x18;
	aDataArray[2] = 0x02;
	aDataArray[3] = 0x00;
	aDataArray[4] = camid;
	ws.send(aDataArray.buffer);
}
function sendMsgGetResolutionSecond(camid) {
	var aDataArray = new Uint8Array(5);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x18;
	aDataArray[2] = 0x02;
	aDataArray[3] = 0x01;
	aDataArray[4] = camid;
	ws.send(aDataArray.buffer);
}
function sednMsgSavePDF(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x11;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sednMsgAddPDF(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x12;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sednMsgSaveTIF(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xa4;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sednMsgAddTIF(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xa5;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sednMsgClearTIF() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xa6;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgWaterMarkOpen(pathUnicode, fontSize, fontStyleIndex, r, g, b, xoffset, yoffset) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(11 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x1a;
	aDataArray[2] = 8 + len;
	aDataArray[3] = fontSize;
	aDataArray[4] = fontStyleIndex;
	aDataArray[5] = r;
	aDataArray[6] = g;
	aDataArray[7] = b;
	aDataArray[8] = xoffset;
	aDataArray[9] = yoffset;
	aDataArray[10] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[11 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sednMsgWaterMarkOpenAlph(pathUnicode, fontSize, fontStyleIndex, r, g, b, xoffset, yoffset, alph) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(12 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xa9;
	aDataArray[2] = 9 + len;
	aDataArray[3] = fontSize;
	aDataArray[4] = fontStyleIndex;
	aDataArray[5] = r;
	aDataArray[6] = g;
	aDataArray[7] = b;
	aDataArray[8] = xoffset;
	aDataArray[9] = yoffset;
	aDataArray[10] = alph;
	aDataArray[11] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[12 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sednMsgWaterMarkClose() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x1b;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgBubaiType(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x2c;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sednMsgQuqudiseType(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x34;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgCombineTwoImage(path1Unicode, path2Unicode, path3Unicode, type) {
	var path1 = encodeURI(path1Unicode);
	var pathdata1 = stringToByte(path1);
	var len1 = path1.length;
	var path2 = encodeURI(path2Unicode);
	var pathdata2 = stringToByte(path2);
	var len2 = path2.length;
	var path3 = encodeURI(path3Unicode);
	var pathdata3 = stringToByte(path3);
	var len3 = path3.length;
	var aDataArray = new Uint8Array(7 + len1 + len2 + len3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x13;
	aDataArray[2] = len1 + len2 + len3 + 4;
	aDataArray[3] = type;
	aDataArray[4] = len1;
	for (var i = 0; i < len1; i++) {
		aDataArray[5 + i] = pathdata1[i];
	}
	aDataArray[5 + len1] = len2;
	for (var i = 0; i < len2; i++) {
		aDataArray[6 + len1 + i] = pathdata2[i];
	}
	aDataArray[6 + len1 + len2] = len3;
	for (var i = 0; i < len3; i++) {
		aDataArray[7 + len1 + len2 + i] = pathdata3[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgCombineTwoImageBase64(path1Unicode, path2Unicode, type) {
	var path1 = encodeURI(path1Unicode);
	var pathdata1 = stringToByte(path1);
	var len1 = path1.length;
	var path2 = encodeURI(path2Unicode);
	var pathdata2 = stringToByte(path2);
	var len2 = path2.length;

	var aDataArray = new Uint8Array(7 + len1 + len2);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x85;
	aDataArray[2] = len1 + len2 + 3;
	aDataArray[3] = type;
	aDataArray[4] = len1;
	for (var i = 0; i < len1; i++) {
		aDataArray[5 + i] = pathdata1[i];
	}
	aDataArray[5 + len1] = len2;
	for (var i = 0; i < len2; i++) {
		aDataArray[6 + len1 + i] = pathdata2[i];
	}

	ws.send(aDataArray.buffer);
}
function sendMsgCombineTwoImageInside(path1Unicode, path2Unicode, path3Unicode, xoff, yoff) {
	var path1 = encodeURI(path1Unicode);
	var pathdata1 = stringToByte(path1);
	var len1 = path1.length;
	var path2 = encodeURI(path2Unicode);
	var pathdata2 = stringToByte(path2);
	var len2 = path2.length;
	var path3 = encodeURI(path3Unicode);
	var pathdata3 = stringToByte(path3);
	var len3 = path3.length;
	var aDataArray = new Uint8Array(11 + len1 + len2 + len3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x86;
	aDataArray[2] = len1 + len2 + len3 + 7;
	aDataArray[3] = xoff / 256;
	aDataArray[4] = xoff % 256;
	aDataArray[5] = yoff / 256;
	aDataArray[6] = yoff % 256;
	aDataArray[7] = len1;
	for (var i = 0; i < len1; i++) {
		aDataArray[8 + i] = pathdata1[i];
	}
	aDataArray[8 + len1] = len2;
	for (var i = 0; i < len2; i++) {
		aDataArray[9 + len1 + i] = pathdata2[i];
	}
	aDataArray[9 + len1 + len2] = len3;
	for (var i = 0; i < len3; i++) {
		aDataArray[10 + len1 + len2 + i] = pathdata3[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgCombineTwoImageInsideBase64(path1Unicode, path2Unicode, xoff, yoff) {
	var path1 = encodeURI(path1Unicode);
	var pathdata1 = stringToByte(path1);
	var len1 = path1.length;
	var path2 = encodeURI(path2Unicode);
	var pathdata2 = stringToByte(path2);
	var len2 = path2.length;

	var aDataArray = new Uint8Array(10 + len1 + len2);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x87;
	aDataArray[2] = len1 + len2 + 6;
	aDataArray[3] = xoff / 256;
	aDataArray[4] = xoff % 256;
	aDataArray[5] = yoff / 256;
	aDataArray[6] = yoff % 256;
	aDataArray[7] = len1;
	for (var i = 0; i < len1; i++) {
		aDataArray[8 + i] = pathdata1[i];
	}
	aDataArray[8 + len1] = len2;
	for (var i = 0; i < len2; i++) {
		aDataArray[9 + len1 + i] = pathdata2[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgSetAutoExposure(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x2d;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgGetExposureRange() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x31;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgGetBrightnessRange() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x2e;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgSetBrightness(temp) {
	var type;
	if (temp < 0) {
		type = 0;
	} else {
		type = 1;
	}
	temp = Math.abs(temp);
	var aDataArray = new Uint8Array(5);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x2f;
	aDataArray[2] = 0x02;
	aDataArray[3] = type;
	aDataArray[4] = temp;
	ws.send(aDataArray.buffer);
}
function sendMsgSetExposure(temp) {
	var type;
	if (temp < 0) {
		type = 0;
	} else {
		type = 1;
	}
	temp = Math.abs(temp);
	var aDataArray = new Uint8Array(5);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x33;
	aDataArray[2] = 0x02;
	aDataArray[3] = type;
	aDataArray[4] = temp;
	ws.send(aDataArray.buffer);
}
function sednMsgGetBase64(filename) {
	var path = encodeURI(filename);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x35;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgDeleteFile(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x38;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgQrcode(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x39;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgBarcode(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x44;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgGetMainCameraID() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x3a;
	aDataArray[2] = 0x01;
	aDataArray[3] = 0x01;
	ws.send(aDataArray.buffer);
}
function sendMsgStartIDCard() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x3c;
	aDataArray[2] = 0x01;
	aDataArray[3] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgGetOneIC() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x3c;
	aDataArray[2] = 0x01;
	aDataArray[3] = 0x01;
	ws.send(aDataArray.buffer);
}
function sendMsgGetICValues(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x3d;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgRotateL() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x40;
	aDataArray[2] = 0x01;
	aDataArray[3] = 0;
	ws.send(aDataArray.buffer);
}
function sendMsgRotateR() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x40;
	aDataArray[2] = 0x01;
	aDataArray[3] = 1;
	ws.send(aDataArray.buffer);
}
function sendMsgBestSize() {
	canvasX = 0;
	canvasY = 0;
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x0d;
	aDataArray[2] = 0x01;
	aDataArray[3] = 2;
	ws.send(aDataArray.buffer);
}
function sendMsgTrueSize() {
	canvasX = 0;
	canvasY = 0;
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x0d;
	aDataArray[2] = 0x01;
	aDataArray[3] = 3;
	ws.send(aDataArray.buffer);
}

function sendMsgWorkIDCard() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x41;
	aDataArray[2] = 0x01;
	aDataArray[3] = 0x01;
	ws.send(aDataArray.buffer);
}
function sendMsgStopWorkIDCard() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x41;
	aDataArray[2] = 0x01;
	aDataArray[3] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgShotBase64(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x42;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgSetJpgQuanlity(value) {
	var aDataArray2 = new Uint8Array(4);
	aDataArray2[0] = 0xef;
	aDataArray2[1] = 0x49;
	aDataArray2[2] = 0x01;
	aDataArray2[3] = value;
	ws.send(aDataArray2.buffer);
}
function sendMsgGetICPictureAll() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x4d;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgInitFinger() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x4f;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgStartFinger() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x50;
	aDataArray[2] = 0x01;
	aDataArray[3] = 0x01;
	ws.send(aDataArray.buffer);
}
function sendMsgCloseFinger() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x50;
	aDataArray[2] = 0x01;
	aDataArray[3] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgBeginVideo(pathUnicode, id, frame) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(6 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x51;
	aDataArray[2] = len + 3;
	aDataArray[3] = id;
	aDataArray[4] = frame;
	aDataArray[5] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[6 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgStopVideo() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x52;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgBeginVideoSecond(pathUnicode, id, frame) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(6 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x53;
	aDataArray[2] = len + 3;
	aDataArray[3] = id;
	aDataArray[4] = frame;
	aDataArray[5] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[6 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgStopVideoSecond() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x54;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgGetAudioName() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x55;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgBarQrcode(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x59;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgMakeDir(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x5a;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgAutoFoucs() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x5b;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
	context.clearRect(0, 0, canvas.width, canvas.height);
}
function sednMsgFaceCheckInit() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x5c;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgFaceCheckUninit() {
	isFaceOpen = false;
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x5d;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgStartFaceCheck() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x5e;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgStopFaceCheck() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x61;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgFaceCheckInitSecond() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x63;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgFaceCheckUninitSecond() {
	isFaceOpenSecond = false;
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x64;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgStartFaceCheckSecond() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x65;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgStopFaceCheckSecond() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x66;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgBankCardFun(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x6b;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgInitFingerFunOrCloase(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x6c;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sendMsgRegisterFinger() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x6d;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgStopRegisterFinger() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x6e;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgVerifyFinger(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x6f;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sednMsgStopVerifyFinger() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x70;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sednMsgQFaceStratDoubleOrClose(type) {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x74;
	aDataArray[2] = 0x01;
	aDataArray[3] = type;
	ws.send(aDataArray.buffer);
}
function sednMsgFaceCheckInitDouble() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x75;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgSetDpi(x, y) {
	var aDataArray = new Uint8Array(7);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x76;
	aDataArray[2] = 0x04;
	aDataArray[3] = x / 256;
	aDataArray[4] = x % 256;
	aDataArray[5] = y / 256;
	aDataArray[6] = y % 256;
	ws.send(aDataArray.buffer);
}
function sednMsgReleaseAll() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x77;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgFaceCheck(type) {
	if (type == 0) {
		isFaceOpen = false;
	}
	var aDataArray2 = new Uint8Array(4);
	aDataArray2[0] = 0xef;
	aDataArray2[1] = 0x78;
	aDataArray2[2] = 0x01;
	aDataArray2[3] = type;
	ws.send(aDataArray2.buffer);
}
function sendMsgCaptureFace() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x79;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgFaceCheckSecond(type) {
	if (type == 0) {
		isFaceOpenSecond = false;
	}
	var aDataArray2 = new Uint8Array(4);
	aDataArray2[0] = 0xef;
	aDataArray2[1] = 0x7a;
	aDataArray2[2] = 0x01;
	aDataArray2[3] = type;
	ws.send(aDataArray2.buffer);
}
function sendMsgCaptureFaceSecond() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x7b;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgGetFinger(type) {
	var aDataArray2 = new Uint8Array(4);
	aDataArray2[0] = 0xef;
	aDataArray2[1] = 0x7f;
	aDataArray2[2] = 0x01;
	aDataArray2[3] = type;
	ws.send(aDataArray2.buffer);
}
function sendMsgVerifyFingerBase64(datalen, pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(7 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x81;
	aDataArray[2] = 0x00;
	aDataArray[3] = datalen / 256;
	aDataArray[4] = datalen % 256;
	aDataArray[5] = len / 256;
	aDataArray[6] = len % 256;
	for (var i = 0; i < len; i++) {
		aDataArray[7 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgAddFingerBase64(datalen, pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(7 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x94;
	aDataArray[2] = 0x00;
	aDataArray[3] = datalen / 256;
	aDataArray[4] = datalen % 256;
	aDataArray[5] = len / 256;
	aDataArray[6] = len % 256;
	for (var i = 0; i < len; i++) {
		aDataArray[7 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgClearAllFingerBase64() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x95;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}

function sendMsgVerifyFingerAllBase64() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x96;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgCheckCamDev() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x89;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgSetFoucs(value) {
	var aDataArray = new Uint8Array(5);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x8c;
	aDataArray[2] = 0x02;
	aDataArray[3] = value / 256;
	aDataArray[4] = value % 256;
	ws.send(aDataArray.buffer);
}
function sendMsgSetDebugModel() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xa3;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgGetALLVidPid() {
	var aDataArray = new Uint8Array(3);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xa7;
	aDataArray[2] = 0x00;
	ws.send(aDataArray.buffer);
}
function sendMsgSetFaceCheckImg(pathUnicode) {
	var path = encodeURI(pathUnicode);
	var pathdata = stringToByte(path);
	var len = path.length;
	var aDataArray = new Uint8Array(3 + len);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xa8;
	aDataArray[2] = len;
	for (var i = 0; i < len; i++) {
		aDataArray[3 + i] = pathdata[i];
	}
	ws.send(aDataArray.buffer);
}
function sendMsgCAM_ProSetMain(type, value) {
	var aDataArray = new Uint8Array(6);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xaa;
	aDataArray[2] = 0x03;
	aDataArray[3] = type;
	aDataArray[4] = value / 256;
	aDataArray[5] = value % 256;
	ws.send(aDataArray.buffer);
}
function sendSendStrBase64() {
	var aDataArray = new Uint8Array(4);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0xb2;
	aDataArray[2] = 0x01;
	aDataArray[3] = 0x01;
	ws.send(aDataArray.buffer);
}
function sednMsgControlLed(camid, type) {
	var aDataArray = new Uint8Array(5);
	aDataArray[0] = 0xef;
	aDataArray[1] = 0x88;
	aDataArray[2] = 0x02;
	aDataArray[3] = camid;
	aDataArray[4] = type;
	ws.send(aDataArray.buffer);
}


function GetFaceZuobiao(Xdis, Ydis) {
	if (isFaceOpen) {
		for (var j = 0; j < faceNum; j++) {
			for (var i = 0; i < 3; i++) {
				context.moveTo(faceZuobiao[2 * i + j * 8] + Xdis, faceZuobiao[2 * i + j * 8 + 1] + Ydis);
				context.lineTo(faceZuobiao[2 * i + j * 8 + 2] + Xdis, faceZuobiao[2 * i + j * 8 + 3] + Ydis);
				context.stroke();
			}
			context.moveTo(faceZuobiao[6 * i + j * 8] + Xdis, faceZuobiao[6 * i + j * 8 + 1] + Ydis);
			context.lineTo(faceZuobiao[0 + j * 8] + Xdis, faceZuobiao[1 + j * 8] + Ydis);
			context.stroke();
		}
	}
}
function GetFaceZuobiaoSecond(Xdis, Ydis) {
	if (isFaceOpenSecond) {
		contextSecond.beginPath();
		contextSecond.strokeStyle = "rgb(0,255,0)";
		contextSecond.lineWidth = 2;
		for (var j = 0; j < faceNumSecond; j++) {
			for (var i = 0; i < 3; i++) {
				contextSecond.moveTo(faceZuobiaoSecond[2 * i + j * 8] + Xdis, faceZuobiaoSecond[2 * i + j * 8 + 1] +
					Ydis);
				contextSecond.lineTo(faceZuobiaoSecond[2 * i + j * 8 + 2] + Xdis, faceZuobiaoSecond[2 * i + j * 8 + 3] +
					Ydis);
				contextSecond.stroke();
			}
			contextSecond.moveTo(faceZuobiaoSecond[6 * i + j * 8] + Xdis, faceZuobiaoSecond[6 * i + j * 8 + 1] + Ydis);
			contextSecond.lineTo(faceZuobiaoSecond[0 + j * 8] + Xdis, faceZuobiaoSecond[1 + j * 8] + Ydis);
			contextSecond.stroke();
		}
	}
}

function SetCusCutFirst() {

	if (setCusCut1) {
		setCusCut1 = false;
		var bpp = rec_ww / imgOrignalW;
		if (rorateAngleType == 1 || rorateAngleType == 3) {
			bpp = rec_ww / imgOrignalH;
		}
		recX_manual = cusCutX1 * bpp + (canvas.width / 2 - rec_ww / 2);
		recY_manual = cusCutY1 * bpp + (canvas.height / 2 - rec_hh / 2);
		recW_manual = cusCutW1 * bpp;
		recH_manual = cusCutH1 * bpp;
		cutXCaibian = cusCutW1;
		cutYCaibian = cusCutH1;
	}

}
function SetCusCutSec() {

	if (setCusCut2) {
		setCusCut2 = false;
		var bpp = rec_ww2 / imgOrignalW2;
		recX_manual2 = cusCutX2 * bpp + (canvasSecond.width / 2 - rec_ww2 / 2);
		recY_manual2 = cusCutY2 * bpp + (canvasSecond.height / 2 - rec_hh2 / 2);
		recW_manual2 = cusCutW2 * bpp;
		recH_manual2 = cusCutH2 * bpp;
		cutXCaibian2 = cusCutW2;
		cutYCaibian2 = cusCutH2;
	}

}



function SetCusCropPlaceWs(cutX, cutY, cutW, cutH) {
	setCusCut1 = true;
	cusCutX1 = cutX;
	cusCutY1 = cutY;
	cusCutW1 = cutW;
	cusCutH1 = cutH;
	//  var bpp = rec_ww/imgOrignalW;
	//  if(rorateAngleType==1 || rorateAngleType==3){
	//   bpp = rec_ww/imgOrignalH;
	// }
	// recX_manual = cutX*bpp+ (canvas.width/2-rec_ww/2);
	// recY_manual = cutY*bpp +(canvas.height/2-rec_hh/2);
	// recW_manual = cutW*bpp;
	// recH_manual = cutH*bpp;
	// cutXCaibian = cutW;
	// cutYCaibian = cutH;

}
function SetCusCropPlaceWs2(cutX, cutY, cutW, cutH) {
	setCusCut2 = true;
	cusCutX2 = cutX;
	cusCutY2 = cutY;
	cusCutW2 = cutW;
	cusCutH2 = cutH;
	// var bpp = rec_ww2/imgOrignalW2;
	// recX_manual2 = cutX*bpp+ (canvasSecond.width/2-rec_ww2/2);
	// recY_manual2 = cutY*bpp +(canvasSecond.height/2-rec_hh2/2);
	// recW_manual2 = cutW*bpp;
	// recH_manual2 = cutH*bpp;
	// cutXCaibian2 = cutW;
	// cutYCaibian2 = cutH;

}

//手动裁边时的长方形
function refreshRect() {
	context.beginPath();
	context.rect(recX_manual, recY_manual, recW_manual, recH_manual);
	context.lineWidth = 2;
	context.strokeStyle = "#0000ff";
	context.stroke();
}
function refreshRect2() {
	contextSecond.beginPath();
	contextSecond.rect(recX_manual2, recY_manual2, recW_manual2, recH_manual2);
	contextSecond.lineWidth = 2;
	contextSecond.strokeStyle = "#0000ff";
	contextSecond.stroke();
}
function stringToByte(str) {
	var bytes = new Array();
	var len, c;
	len = str.length;
	for (var i = 0; i < len; i++) {
		c = str.charCodeAt(i);
		if (c >= 0x010000 && c <= 0x10FFFF) {
			bytes.push(((c >> 18) & 0x07) | 0xF0);
			bytes.push(((c >> 12) & 0x3F) | 0x80);
			bytes.push(((c >> 6) & 0x3F) | 0x80);
			bytes.push((c & 0x3F) | 0x80);
		} else if (c >= 0x000800 && c <= 0x00FFFF) {
			bytes.push(((c >> 12) & 0x0F) | 0xE0);
			bytes.push(((c >> 6) & 0x3F) | 0x80);
			bytes.push((c & 0x3F) | 0x80);
		} else if (c >= 0x000080 && c <= 0x0007FF) {
			bytes.push(((c >> 6) & 0x1F) | 0xC0);
			bytes.push((c & 0x3F) | 0x80);
		} else {
			bytes.push(c & 0xFF);
		}
	}
	return bytes;
}
function byteToString(arr) {
	if (typeof arr === 'string') {
		return arr;
	}
	var str = '',
		_arr = arr;
	for (var i = 0; i < _arr.length; i++) {
		var one = _arr[i].toString(2),
			v = one.match(/^1+?(?=0)/);
		if (v && one.length == 8) {
			var bytesLength = v[0].length;
			var store = _arr[i].toString(2).slice(7 - bytesLength);
			for (var st = 1; st < bytesLength; st++) {
				store += _arr[st + i].toString(2).slice(2);
			}
			str += String.fromCharCode(parseInt(store, 2));
			i += bytesLength - 1;
		} else {
			str += String.fromCharCode(_arr[i]);
		}
	}
	return str;
}
function base64Encode(input) {
	var rv;
	rv = encodeURIComponent(input);
	rv = unescape(rv);
	rv = window.btoa(rv);
	return rv;
}
function isIE() { //ie?
	if (!!window.ActiveXObject || "ActiveXObject" in window)
		return true;
	else
		return false;
}